//
//  UPNetworkManager.h
//  Uang Pasti
//
//  Created by 李永彬 on 2025/8/16.
//

#import <Foundation/Foundation.h>
#import <AFNetworking/AFNetworking.h>
#import "UPResponse.h"

typedef NS_ENUM(NSInteger, UPDomainType) {
    UPDomainTypeDefault,      // 默认域名
    UPDomainTypeH5
};

typedef NS_ENUM(NSInteger, UPFieldHeaderContentType) {
    UPFieldHeaderContentTypeJSON,        // JSON格式
    UPFieldHeaderContentTypeFormURLEncoded, // 表单格式
    UPFieldHeaderContentTypeFormData     // 表单数据格式
};

typedef void (^UPRequestCallback)(UPResponse *response);

// 硬编码的域名配置
static NSString * const kDefaultDomain = @"http://149.129.255.14:9503/perally/";
static NSString * const kH5Domain = @"http://149.129.255.14:9503/";

@interface UPNetworkManager : NSObject

/// 单例方法
+ (instancetype)sharedManager;

/// GET请求
/// @param path 请求路径
/// @param domainType 域名类型
/// @param params 请求参数
/// @param contentType 请求数据格式
/// @param callback 成功回调
- (NSURLSessionDataTask *)GET:(NSString *)path
                   domainType:(UPDomainType)domainType
                       params:(NSDictionary *)params
                  contentType:(UPFieldHeaderContentType)contentType
                     callback:(UPRequestCallback)callback;

/// POST请求
/// @param path 请求路径
/// @param domainType 域名类型
/// @param params 请求参数
/// @param contentType 请求数据格式
/// @param callback 成功回调
- (NSURLSessionDataTask *)POST:(NSString *)path
                    domainType:(UPDomainType)domainType
                        params:(NSDictionary *)params
                   contentType:(UPFieldHeaderContentType)contentType
                      callback:(UPRequestCallback)callback;

/// 上传文件
/// @param path 请求路径
/// @param domainType 域名类型
/// @param params 请求参数
/// @param fileData 文件数据
/// @param name 文件字段名
/// @param fileName 文件名
/// @param mimeType 文件类型
/// @param progress 上传进度
/// @param callback 成功回调
- (NSURLSessionDataTask *)upload:(NSString *)path
                      domainType:(UPDomainType)domainType
                          params:(NSDictionary *)params
                       fileData:(NSData *)fileData
                           name:(NSString *)name
                       fileName:(NSString *)fileName
                       mimeType:(NSString *)mimeType
                       progress:(void (^)(NSProgress *progress))progress
                       callback:(UPRequestCallback)callback;

- (NSDictionary *)commonParameters;

@end
